import { ElMessage } from "element-plus";
import { useI18n } from "vue-i18n";

/**
 * 
 * @param {*} form 对话框中的表单
 * @param {*} queryForm 搜索框中的表单
 */
export default function useTableHandlers(form, queryForm) {
    // 数据
    const { t } = useI18n()
    // 引用
    const tableRef = ref()
    const formRef = ref()
    // 对话框属性
    const dialogVisible = ref(false)
    const isEdit = ref(false)
    const formLoading = ref(false)    
    // 需要重置的属性
    const __formOld__ = { ...form }
    const __queryFormOld__ = { ...queryForm }

    // 方法函数
    
    // 搜索函数
    const doSearch = () => {
        tableRef.value.reload()
    }

    // 新增函数
    const doAdd = () => {
        dialogVisible.value = true
        isEdit.value = false
        formRef.value && formRef.value.clearValidate()
    }

    // 编辑函数
    const doEdit = (row) => {
        if (!form) return
        isEdit.value = true
        dialogVisible.value = true
        for (const k in form) {
            if (k in row) {
                form[k] = row[k]
            }
        }
    }

    // 获取请求参数
    const getParams = () => {
        const params = { ...form }
        if (!isEdit.value) {
            delete params.id
        }

        return params
    }

    // 提交函数
    const doSubmit = (apis, callback) => {
        formRef.value.validate((valid) => {
            if (valid) {
                formLoading.value = true
                let promise
                const params = apis.getParams ? apis.getParams() : getParams()
                if (isEdit.value) {
                    // 编辑函数
                    promise = apis.update(params)
                } else {
                    // 新增函数
                    promise = apis.save(params)
                }

                promise.then((res) => {
                    if (callback) {
                        // 如果存在回调函数，调用自定义的回调函数
                        callback(res)
                    } else {
                        // 默认的提示
                        ElMessage({
                            message: t('tips.success'),
                            type: "success",
                            showClose: true
                        })
                    }

                    // 关闭对话框
                    doClose()
                    if (isEdit.value) {
                        // 直接刷新
                        tableRef.value.refresh()
                    } else {
                        // 请求第一页数据
                        tableRef.valid.reload()
                    }
                }).finally(() => {
                    formLoading.value = false
                })
            }
        })
    }

    // 重置表单
    const resetForm = () => {
        if (!form) return
        for (const k in __formOld__) {
            form[k] = __formOld__[k]
        }
    }

    // 关闭对话框
    const doClose = () => {
        dialogVisible.value = false
        resetForm()
    }

    // 重置搜索框
    const doReset = () => {
        if (!queryForm) return
        for (const k in __queryFormOld__) {
            queryForm[k] = __queryFormOld__[k]
        }
    }

    // 删除功能
    const doDelete = (apis, ids, callback) => {
        apis.delete(ids).then((res) => {
            if (callback) {
                // 如果存在回调函数，调用自定义的回调函数
                callback(res)
            } else {
                // 默认的提示
                ElMessage({
                    message: t('tips.success'),
                    type: "success",
                    showClose: true
                })
            }

            tableRef.value.refresh()
        })
    }

    return {
        t,
        tableRef,
        dialogVisible,
        isEdit,
        formLoading,
        formRef,
        doSearch,
        doAdd,
        doEdit,
        doSubmit,
        doClose,      
        doReset,
        doDelete
    }
}